package com.xth8013.as.config;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.sql.DataSource;

/**
 * Created by tianhua.xie on 2018/6/4 15:29.
 */
//@Configuration
public class ApplicationConfig {


    @Autowired
    private Environment env;

    //destroy-method="close"的作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用.
    @Bean(destroyMethod =  "close")
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl(env.getProperty("jdbc.url"));
        dataSource.setUsername(env.getProperty("jdbc.username"));//用户名
        dataSource.setPassword(env.getProperty("jdbc.password"));//密码
        dataSource.setDriverClassName(env.getProperty("jdbc.driver"));
        dataSource.setInitialSize(Integer.parseInt(env.getProperty("jdbc.initialSize")));//初始化时建立物理连接的个数
        dataSource.setMaxActive(Integer.parseInt(env.getProperty("jdbc.maxActive")));//最大连接池数量
        dataSource.setMinIdle(Integer.parseInt(env.getProperty("jdbc.minIdle")));//最小空闲 数量
        dataSource.setMaxWait(Integer.parseInt(env.getProperty("jdbc.maxWait")));//获取连接时最大等待时间，单位毫秒。
        dataSource.setValidationQuery("SELECT 1");//用来检测连接是否有效的sql
        dataSource.setTestOnBorrow(false);//申请连接时执行validationQuery检测连接是否有效
        dataSource.setTestWhileIdle(true);//建议配置为true，不影响性能，并且保证安全性。
        dataSource.setPoolPreparedStatements(false);//是否缓存preparedStatement，也就是PSCache
        return dataSource;
    }

}

